package com.frank.oj.service.problem;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.frank.model.entity.problem.CodeTemplate;
import com.frank.model.entity.problem.Language;
import com.frank.model.entity.problem.Problem;
import com.frank.oj.common.result.CommonResult;
import com.frank.oj.model.dto.LastAcceptedCodeVO;
import com.frank.oj.model.dto.PidListDTO;
import com.frank.oj.model.vo.ProblemFullScreenListVO;
import com.frank.oj.model.vo.ProblemInfoVO;
import com.frank.oj.model.vo.ProblemVO;
import com.frank.oj.model.vo.RandomProblemVO;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * @author frank
 * @Date 2024/3/22
 */
public interface ProblemService {
    public CommonResult<Page<ProblemVO>> getProblemList(Integer limit, Integer currentPage,
                                                        String keyword, List<Long> tagId, Integer difficulty, String oj);

    List<CodeTemplate> getProblemCodeTemplate(Long pid);

    Collection<Language> getProblemLanguages(Long pid);

    CommonResult<Map<Long, Object>> getUserProblemStatus(PidListDTO pidListDTO);

    CommonResult<RandomProblemVO> getRandomProblem();

    CommonResult<ProblemInfoVO> getProblemInfo(String problemId, Long gid);

    CommonResult<LastAcceptedCodeVO> getUserLastAcceptedCode(Long pid, Long cid);

    CommonResult<List<ProblemFullScreenListVO>> getFullScreenProblemList(Long tid, Long cid);
}
